<?php
/**
 * @author jonathan <jo.link.noir@gmail.com>
 * @version 1.0: jo_link_noir
 * @date 24-10-2009
 */
interface SW_Structure_DAO_Interface
{
	/**
	 * Ajoute une structure et retourne un objet de la structure
	 * @param int $id_planet
	 * @param int $group
	 * @param int $level
	 * @return SW_Structure_Element
	 */
	public function createElement($id_planet, $group, $level);

	/**
	 * Insert une nouvelle liste de construction via un élément
	 * @param SW_Structure_Element $element
	 * @param int $timestamp
	 * @param int $id_planet
	 * @param int $count : nombre pour faire évoluer la structure
	 * @return SW_Structure_List
	 */
	public function createList(SW_Structure_Element $element, $timestamp, $id_planet, $count);

	/**
	 * @param int $id_structure
	 */
	public function delete($id_structure);

	/**
	 * @param array $ids_structure
	 */
	public function deleteElements(array $ids_structure);

	/**
	 * @param int $id_list
	 */
	public function deleteList($id_list);

	/**
	 * @param array $ids_structure
	 */
	public function deleteLists(array $ids_structure);

	/**
	 * @param SW_Structure_Element $element
	 */
	public function update(SW_Structure_Element $element);

	/**
	 * Commence la construction d'un élément
	 * @param SW_Structure $structure
	 * @param SW_Structure_Element $element
	 * @param int $timestamp
	 * @param int $count : nombre pour faire évoluer la structure
	 * @return SW_Structure_List
	 */
	public function build(SW_Structure $structure, SW_Structure_Element $element, $timestamp, $count);

	/**
	 * Arrête la construction d'un élément
	 * @param SW_Structure $structure
	 * @param SW_Structure_List $list
	 * @param int $timestamp
	 */
	public function down(SW_Structure $structure, SW_Structure_List $list, $timestamp);

	/**
	 * Finit la construction d'un élément
	 * @param SW_Structure_Element $element
	 * @param SW_Structure_List $list
	 */
	public function finish(SW_Structure_Element $element, SW_Structure_List $list);
}